//当name在函数内是可以调用的
// let fn=function(name){
//     console.log("函数内",name);
//     return {
//         hi:function(){
//             return name;
//         }
//     }
// }
// //因为函数内用了闭包函数所以函数外可以用name,闭包函数把name的生命周期延长了
// let obj=fn("teom");
// console.log("函数外",obj.hi());


// function test(){
//     var x=1;
//     return function(){
//         x++;
//         console.log(x);
//     }
// }
// let m1=test();
// let m2=test();
// m1();//2
// m1();//3
// m2();//因为m1和m2它们是两个独立的空间所以m2它返回的是2


// function test() {
//     var arr=[];
//     for(var i=0;i<5;i++){
//         arr[i]=function(){
//             //内部函数,这里仅仅定义了函数
//             return i;
//         }
//     }
//     return arr;
// }
// let fn=test();
// console.log(fn[0]());
// console.log(fn[1]());
// console.log(fn[2]());


//封装
// let Stu=function(){
//     var name="默认名字"
//     return {
//         getName:function(){
//             return name;
//         },
//         setName:function(na){
//             name=na
//         }
//     }
// };

// let tom=Stu();
// let jerry=Stu();
// //因为这两个是两个独立的空间所以tom赋值的时候jerry不会被改变
// tom.setName("郭超")
// console.log(tom.getName());
// console.log(jerry.getName());

// console.log("外",stu.name);
// console.log("内",stu.getName());
// stu.setName("龙龟")
// console.log(stu.getName());

